package xeroxware.web.common.service;

import java.util.List;
import java.util.Map;

/**
 * <pre>
 * CommonQueryService
 * </pre>
 * 
 * @since 2013. 1. 2.
 * @author XEROXER
 */
public interface CommonQueryService {

	/**
	 * 리스트를 조회한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @return 조회 결과
	 * @throws Exception
	 */
	public List<Map<String, Object>> selectList(String sqlId) throws Exception;

	/**
	 * 리스트를 조회한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param parameter
	 *            SQL mapping 입력 데이터를 세팅한 파라메터
	 * @return 조회 결과
	 * @throws Exception
	 */
	public List<Map<String, Object>> selectList(String sqlId, Object parameter) throws Exception;

	/**
	 * 단건을 조회한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @return 단건 조회 결과
	 * @throws Exception
	 */
	public Object selectOne(String sqlId) throws Exception;

	/**
	 * 단건을 조회한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param parameter
	 *            SQL mapping 입력 데이터를 세팅한 파라메터
	 * @return 단건 조회 결과
	 * @throws Exception
	 */
	public Object selectOne(String sqlId, Object parameter) throws Exception;

	/**
	 * 부분 범위 리스트를 조회한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param pageIndex
	 *            현재 페이지 번호
	 * @param pageSize
	 *            한 페이지 조회 수
	 * @return 부분 범위 조회 결과
	 * @throws Exception
	 */
	public List<Map<String, Object>> selectListWithPaging(String sqlId, int pageIndex, int pageSize) throws Exception;

	/**
	 * 부분 범위 리스트를 조회한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param parameter
	 *            SQL mapping 입력 데이터를 세팅한 파라메터
	 * @param pageIndex
	 *            현재 페이지 번호
	 * @param pageSize
	 *            한 페이지 조회 수
	 * @return 부분 범위 조회 결과
	 * @throws Exception
	 */
	public List<Map<String, Object>> selectListWithPaging(String sqlId, Object parameter, int pageIndex, int pageSize)
			throws Exception;

	/**
	 * 입력을 처리한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @return insert 처리결과 count
	 * @throws Exception
	 */
	public int insert(String sqlId) throws Exception;

	/**
	 * 입력을 처리한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param parameter
	 *            SQL mapping 입력 데이터를 세팅한 파라메터
	 * @return insert 처리결과 count
	 * @throws Exception
	 */
	public int insert(String sqlId, Object parameter) throws Exception;

	/**
	 * 다건 입력을 처리한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param list
	 *            SQL mapping 입력 데이터를 List 형식으로 다건 세팅한 파라메터
	 * @return insert 처리결과 count
	 * @throws Exception
	 */
	public int insertRecordset(String sqlId, List<?> list) throws Exception;

	/**
	 * 수정을 처리한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @return update 처리결과 count
	 * @throws Exception
	 */
	public int update(String sqlId) throws Exception;

	/**
	 * 수정을 처리한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param parameter
	 *            SQL mapping 입력 데이터를 세팅한 파라메터
	 * @return update 처리결과 count
	 * @throws Exception
	 */
	public int update(String sqlId, Object parameter) throws Exception;

	/**
	 * 다건 수정을 처리한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param list
	 *            SQL mapping 입력 데이터를 List 형식으로 다건 세팅한 파라메터
	 * @return update 처리결과 count
	 * @throws Exception
	 */
	public int updateRecordset(String sqlId, List<?> list) throws Exception;

	/**
	 * 삭제를 처리한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @return delete 처리결과 count
	 * @throws Exception
	 */
	public int delete(String sqlId) throws Exception;

	/**
	 * 삭제를 처리한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param parameter
	 *            SQL mapping 입력 데이터를 세팅한 파라메터
	 * @return delete 처리결과 count
	 * @throws Exception
	 */
	public int delete(String sqlId, Object parameter) throws Exception;

	/**
	 * 다건 삭제를 처리한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param list
	 *            SQL mapping 입력 데이터를 List 형식으로 다건 세팅한 파라메터
	 * @return delete 처리결과 count
	 * @throws Exception
	 */
	public int deleteRecordset(String sqlId, List<?> list) throws Exception;

	/**
	 * 레코드의 상태(_ROW_TYPE)별로 입력/수정/삭제를 처리한다.
	 * 
	 * @param insertId
	 *            Insert SQL mapping 쿼리 ID
	 * @param updateId
	 *            Update SQL mapping 쿼리 ID
	 * @param deleteId
	 *            Delete SQL mapping 쿼리 ID
	 * @param list
	 *            SQL mapping 입력 데이터를 List 형식으로 다건 세팅한 파라메터
	 * @return 처리결과 count
	 * @throws Exception
	 */
	public int save(String insertId, String updateId, String deleteId, List<Map<String, Object>> list) throws Exception;
}
